﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Sausage.Web.Models.Report
{
    /// <summary>
    /// 工程花费模型
    /// </summary>
    /// <remarks></remarks>
    /// <history>
    /// [zanezeng]               2012/03/23 17:25    创建
    /// </history>
    public class ProjectCostModel
    {
        /// <summary>
        /// 获得或者设置项目编号。
        /// </summary>
        /// <value>
        /// 项目编号。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [ZengE]               2012/3/23 20:34    创建
        /// </history>
        public Guid ProjectID
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置项目编号。
        /// </summary>
        /// <value>
        /// 项目编号。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [ZengE]               2012/3/23 20:34    创建
        /// </history>
        public string ProjectCode
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置项目名称。
        /// </summary>
        /// <value>
        /// 项目名称。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [ZengE]               2012/3/23 20:34    创建
        /// </history>
        public string ProjectName
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置分项工程编号。
        /// </summary>
        /// <value>
        /// 分项工程编号。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [ZengE]               2012/3/23 20:34    创建
        /// </history>
        public Guid ConstructionID
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置分项工程名称。
        /// </summary>
        /// <value>
        /// 分项工程名称。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [ZengE]               2012/3/23 20:34    创建
        /// </history>
        public string Construction
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置实际金额。
        /// </summary>
        /// <value>
        /// 实际金额。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/22 10:46    创建
        /// </history>
        public decimal Amount
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置剩余金额。
        /// </summary>
        /// <value>
        /// 剩余金额。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/22 10:46    创建
        /// </history>
        public decimal LeftBudget
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置计划金额。
        /// </summary>
        /// <value>
        /// 计划金额。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/22 10:46    创建
        /// </history>
        public decimal PlanAmount
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置计划金额。
        /// </summary>
        /// <value>
        /// 计划金额。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/22 10:46    创建
        /// </history>
        public decimal PlanTotalAmount
        {
            get;
            set;
        }

        /// <summary>
        /// 获得单位。
        /// </summary>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/27 15:55    创建
        /// </history>
        public string Unit
        {
            get
            {
                return "万元";
            }
        }

        /// <summary>
        /// 获得或者设置计划金额。
        /// </summary>
        /// <value>
        /// 计划金额。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/22 10:46    创建
        /// </history>
        public decimal TotalAmount
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置工期。
        /// </summary>
        /// <value>
        /// 工期。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/27 11:49    创建
        /// </history>
        public double Duration
        {
            get
            {
                //判断是否设置了开工日期和竣工日期
                if (this.FirstConstructionDate.HasValue && this.LatestConstructionDate.HasValue)
                {
                    return this.LatestConstructionDate.Value.Subtract(this.FirstConstructionDate.Value).TotalDays;
                }

                //默认返回0
                return 0;
            }
        }

        /// <summary>
        /// 获得或者设置开工日期。
        /// </summary>
        /// <value>
        /// 开工日期。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/27 13:24    创建
        /// </history>
        public DateTime? StartDate
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置竣工日期。
        /// </summary>
        /// <value>
        /// 竣工日期。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/27 13:24    创建
        /// </history>
        public DateTime? CompletionDate
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置实际开工日期。
        /// </summary>
        /// <value>
        /// 开工日期。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/27 13:24    创建
        /// </history>
        public DateTime? FirstConstructionDate
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置实际竣工日期。
        /// </summary>
        /// <value>
        /// 竣工日期。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/27 13:24    创建
        /// </history>
        public DateTime? LatestConstructionDate
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置计划工期。
        /// </summary>
        /// <value>
        /// 计划工期。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2012/03/27 11:49    创建
        /// </history>
        public double PlannedDuration
        {
            get
            {
                //判断是否设置了开工日期和竣工日期
                if (this.StartDate.HasValue && this.CompletionDate.HasValue)
                {
                    return this.CompletionDate.Value.Subtract(this.StartDate.Value).TotalDays;
                }

                //默认返回0
                return 0;
            }
        }

        /// <summary>
        /// 获得或者设置花费进度。
        /// </summary>
        /// <value>
        /// 花费进度。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [ZengE]               2012/3/25 10:03    创建
        /// </history>
        public decimal FundingProgress
        {
            get;
            set;
        }

        /// <summary>
        /// 获得或者设置工期进度。
        /// </summary>
        /// <value>
        /// 工期进度。
        /// </value>
        /// <remarks></remarks>
        /// <history>
        /// [ZengE]               2012/3/25 10:03    创建
        /// </history>
        public double TimeProgress
        {
            get
            {
                //判断是否有计划工期
                if (this.PlannedDuration > 0)
                {
                    return this.Duration / this.PlannedDuration;
                }

                //默认返回-1;
                return -1;
            }
        }
    }
}